#include "header.h"
void initStack(SqStack & s){
    s.base = (ElemType*)malloc(INIT_STACK_SIZE);
    if(!s.base){
        exit(0);
    }
    s.stacksize = INIT_STACK_SIZE;
    s.top = s.base;
}
void pushStack(SqStack & s,ElemType & e){
    if((s.top - s.base) >= s.stacksize){
        s.base = (ElemType*)realloc(s.base,s.stacksize+ STACK_INCREMENT);
        if(!s.base)
            return;
        s.top = s.base + s.stacksize;
        s.stacksize += STACK_INCREMENT;
    }
    *(s.top++) = e;
}
ElemType popStack(SqStack & s){
    if(s.top == s.base)
        exit(0);
    static ElemType value;
    value = *(s.top--);
}
void clearStack(SqStack & s){
    s.top = s.base;
}
void printInput(SqStack & s){
    SqStack temp = s;
    while(temp.top != temp.base){
        cout <<*(temp.base++);
    }
    cout<<endl;
}

int main(void){
    cout<<"please input your a line words,end of '~'"<<endl;
    SqStack sqstack;
    initStack(sqstack);
    char input;
    bool isContinue = 1;
    while(isContinue){
        input = getchar();
        switch (input){
        case '#': // 清除上一个字符
            popStack(sqstack);
            break;
        case '@': // 清除整行输入
            clearStack(sqstack);
            break;
        case '~': // 退出
            isContinue = 0;
            break;
        default:
            pushStack(sqstack,input);
        }
    }
    cout<<"your words: ";
    printInput(sqstack);
    return 0;
}
